#include"MyQueue.h"

//MyQueue* MyQueue:: myQueueCreate() {
//    MyQueue* ptr = (MyQueue*)malloc(sizeof(MyQueue));
//    if (ptr == NULL) {
//        perror("malloc fail");
//        return;
//    }
//   // STInit(&ptr->Q1);
//   // STInit(&ptr->Q2);
//    return ptr;
//}

void MyQueue::Push(int x) {

    if (!Q1.Empty()) {
        Q1.Push(x);
    }
    else {
        Q2.Push(x);
    }
}

int MyQueue::Pop(){
    //assert(obj);
    Stack Empty = Q1;
    Stack NoEmpty = Q2;
    if (!Q1.Empty()) {
        Empty = Q2;
        NoEmpty = Q1;
    }
    Stack Q3;
    while (NoEmpty.top - 1 > 0) {
        int front = NoEmpty.Top();
        NoEmpty.Pop();
        Q3.Push(front);
    }
    int front = NoEmpty.Top();
    NoEmpty.Pop();
    while (Q3.top - 1 >= 0) {
        int prt =Q3.Top();
        Q3.Pop();
        Empty.Push(prt);
    }
    return front;
}

int MyQueue::Peek() {
    if (!Q1.Empty()) {
        return Q1.a[0];
    }
    else {
        return Q2.a[0];
    }
}

bool MyQueue::Empty() {
    return Q1.Empty() && Q2.Empty();
}

//void myQueueFree(MyQueue* obj) {
//    //STDestroy(&obj->Q1);
//    //STDestroy(&obj->Q2);
//    free(obj);
//}